#include <iostream>     // std::cout, std::cin
#include <algorithm>    // std::sort
#include <vector>       // std::vector
#include <limits>
#include "dijkstra.h"

using namespace std;

vector<int> distancia;


void dijkstra()
{
	distancia.resize(n+1);
	for (int i = 0; i <= n; i++)
	{
		distancia[i] = numeric_limits<int>::max();
	}
	distancia[u] = 0;
	vector <int>  heap;
	heap.push_back(u);


	while (heap.size() > 0)
	{
		sort (heap.begin(), heap.end(), ordenar_por_w1);
		int k = heap[heap.size()-1];

		heap.pop_back();
		for (int i = 0; i < nodos[k].adyacentes.size(); i++)
		{
			if (distancia[nodos[k].adyacentes[i]->numero] > distancia[k] + nodos[k].w[nodos[k].adyacentes[i]->numero].first)
			{
				distancia[nodos[k].adyacentes[i]->numero] = distancia[k] + nodos[k].w[nodos[k].adyacentes[i]->numero].first;
				heap.push_back(nodos[k].adyacentes[i]->numero);
			}		
		}
	}
}

bool ordenar_por_w1(int n1, int n2)
{
  return (distancia[n1] > distancia[n2]);
}
